Kick3 : SimpleSynthDescriptor{
	

	createGuiControls{	
		this.put(\highDecay, c.new(default: 0.05, max: 0.1, min: 0.0001) );
		this.put(\lowDecay, c.new(default: 0.01, max: 0.3, min: 0.0001) );
		this.put(\swellAmp, c.new(default:1, max: 2, min: 0) );
		this.put(\swellFMRate, c.new(default: 4, max: 50, min: 0, theLog: 3 ) );
		this.put(\swellFMDepth, c.new(default: 0.5 max: 3, min: 0) );
		this.put(\rateOffset, c.new(default: 0.1 max: 1, min: 0) );
		this.put(\clickLevel, c.new(default: 2 max: 4, min: 0) );
		
		
		this.put(\attack, 		c.new(default: 0.001, min:0.001, max: 3,  midiNum:17) );
		this.put(\len, 			c.new(default: 0.02, min: 0.01, max: 0.5,  midiNum:16) );
		this.put(\sustain, 		c.new(default: 0.2, min:0.001, max: 1,  midiNum:17) );
		this.put(\decay, 			c.new(default: 0.5,min: 0.001, max: 5,  midiNum:18));
		
		
		
	}
	
	*loadSynth{
	
		"loading SwoopSine".postln;
		
		SynthDef(
					
			this.getSynthName,
			{
				arg 
				busNum,
				highDecay = 0.01,
				lowDecay = 0.01,
				lowPitch = 90,
				hiPitch = 180,
				swellAmp = 1,
				swellFMRate = 4,
				swellFMDepth = 0.5,
				rateOffset = 0.1,
				clickLevel = 2,
				swellPitch = 90
				
				;
				
				var sig=0, swell, swellFM, click;
				
				lowPitch = lowPitch * EnvGen.kr(Env.perc(0,lowDecay, 1, 0));
				sig = sig + SinOsc.ar(lowPitch + 60) ;
				
				hiPitch = hiPitch * EnvGen.kr(Env.perc(0, highDecay, 1, 0));
				sig = sig + SinOsc.ar(hiPitch + 60) ;
				
				click = SinOsc.ar(EnvGen.kr(Env.perc(0, 0.01, 5000, 0)) + 3000);
				click = click * EnvGen.kr(Env.perc(0, 0.01, 1, 0));
				click = click * clickLevel;
				sig = sig + click;
				
				swellFM = SinOsc.ar(swellFMRate) * swellFMDepth + 1;
				
				swell = [nil, nil];
				
				swell[0] =  SinOsc.ar(swellPitch * swellFM * (1-rateOffset));
				swell[0] = swell[0] * EnvGen.kr(Env.perc(0.5, 0.1, 0.5, 0));
				
				
				swell[1] =  SinOsc.ar(swellPitch * swellFM * (1+rateOffset));
				swell[1] = swell[1] * EnvGen.kr(Env.perc(0.5, 0.1, 0.5, 0));
				
				swell = swell * swellAmp;
				
				sig = sig + swell;
			

				  
				Out.ar(busNum, 
					sig
				);
				
				
			}
			
		).load(Server.default);
	
	}

}